/**
 * 删除输入行结尾处的空格和tab，同时删除空行，输出结果到屏幕
 */

#include <stdio.h>

#define MAXLINE 1000

int getlines(char s[], int lim);
int trailing(char str[], int len);
void visualline(char str[]);

int main() {
    int len, newlen;
    char line[MAXLINE];

    while((len = getlines(line, MAXLINE)) > 0) {
        visualline(line);
        if (trailing(line, len) > 0) visualline(line);
    }

    return 0;
}

// 从输出中获取内容凑成一行直到遇到换行符或者达到lim限制长度
int getlines(char s[], int lim) {
    int i, c;
    for( i = 0; i < lim-1 && (c = getchar()) != EOF && c != '\n'; i++) {
        s[i] = c;
    }
    if (c == '\n') {
        s[i] = '\n';
        i++;
    }
    s[i] = '\0';

    return i;
}

int trailing(char str[], int len) {
    int i = len-2;
    if (i < 0) return -1;
    while(str[i] == ' ' || str[i] == '\t') {
        str[i] = '\n';
        str[i+1] = '\0';
        i--;
        if (i < 0) return -1;
    }

    return i+2;
}

// 将字符串中的空格替换为_ 将tab替换为@ 其他内容不变，然后输出到屏幕
void visualline(char str[]) {
    int i = 0;
    while(str[i] != '\0') {
        if (str[i] == ' ') putchar('_');
        else if (str[i] == '\t') putchar('@');
        else putchar(str[i]);
        i++;
    }
}
